package com.rdgzs.framework.entity;

import java.util.Date;


import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.MappedSuperclass;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Transient;

import org.hibernate.annotations.GenericGenerator;
import org.springframework.beans.factory.annotation.Autowired;

import com.rdgzs.framework.utilsTools.DateTimeUtils;
import com.rdgzs.framework.utilsTools.UtilsObject;

/**
 * 统一定义id的entity基类.
 * 
 * 基类统一定义id的属性名称、数据类型、列名映射及生成策略.
 * 子类可重载getId()函数重定义id的列名映射和生成策略.
 * 
 * @author calvin
 */
//JPA 基类的标识
@MappedSuperclass
public abstract class IdEntity {
	
	protected String id;
//	private Date createTime;
//	private Date modifyTime;
//	private String createId;
//	private String modifyId;
//	private AccountManager accountManager;

	@Id
	//@GeneratedValue(strategy = GenerationType.IDENTITY)
	//@GeneratedValue(strategy = GenerationType.SEQUENCE)
	//@GeneratedValue(generator = "system-uuid")
	//@GenericGenerator(name = "system-uuid", strategy = "uuid")
	//@GeneratedValue(strategy = GenerationType.AUTO)
	@Column(name = "id", unique = true, nullable = false, length = 32)
	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id=id;
	}
	
	@Transient
	public String dateToStrDef(Date date) throws Exception {
		try {
			return DateTimeUtils.dateToStrDefault(date);
		} catch (Exception e) {
			e.printStackTrace();
			throw e;
		}
	}
	
	@Transient
	public String buildID() {
		this.id=UtilsObject.getUuidStr();
		return id;
	}
	
//	@Transient
//	public User getUser(String userId) throws Exception {
//		try {
//			return accountManager.getUser(userId);
//		} catch (Exception e) {
//			e.printStackTrace();
//			throw e;
//		}
//	}
//	
//	@Transient
//	public String getUserName(String userId) throws Exception {
//		try {
//			if(this.getUser(userId)==null){
//				return null;
//			}else{
//				return this.getUser(userId).getNameCn();
//			}
//		} catch (Exception e) {
//			e.printStackTrace();
//			throw e;
//		}
//	}
//	
//	@Transient
//	public String getCreateUserName() throws Exception {
//		try {
//			return this.getUserName(this.createId);
//		} catch (Exception e) {
//			// TODO Auto-generated catch block
//			e.printStackTrace();
//			throw e;
//		}
//	}
//
//	@Transient
//	public String getModifyUserName() throws Exception {
//		try {
//			return this.getUserName(this.modifyId);
//		} catch (Exception e) {
//			// TODO Auto-generated catch block
//			e.printStackTrace();
//			throw e;
//		}
//	}
//	
//	@Transient
//	public String getCreateTimeStr() throws Exception {
//		try {
//			return DateTimeUtils.dateToStr(this.createTime, DateTimeUtils.SDF_YYYY_MM_DD_2);
//		} catch (Exception e) {
//			e.printStackTrace();
//			throw e;
//		}
//	}
//	public void setCreateTimeStr(String weeklyDateStart) throws Exception {
//		try {
//			this.createTime = DateTimeUtils.strToDate(weeklyDateStart, DateTimeUtils.SDF_YYYY_MM_DD_2);
//		} catch (Exception e) {
//			e.printStackTrace();
//			throw e;
//		}
//	}
//	
//	@Transient
//	public String getModifyTimeStr() throws Exception {
//		try {
//			return DateTimeUtils.dateToStr(this.modifyTime, DateTimeUtils.SDF_YYYY_MM_DD_2);
//		} catch (Exception e) {
//			e.printStackTrace();
//			throw e;
//		}
//	}
//
//	public void setModifyTimeStr(String modifyTime) throws Exception {
//		try {
//			this.createTime = DateTimeUtils.strToDate(modifyTime, DateTimeUtils.SDF_YYYY_MM_DD_2);
//		} catch (Exception e) {
//			e.printStackTrace();
//			throw e;
//		}
//	}
//	
//	@Transient
//	public AccountManager getAccountManager() {
//		return accountManager;
//	}
//	//@Autowired
//	public void setAccountManager(AccountManager accountManager) {
//		this.accountManager = accountManager;
//	}
	
}
